public class TestDemo {

    //循环实现斐波那契数列
    public static int fib_while(int n){
        if (n == 0 || n == 1){
            return n;
        }else {
            int f1 = 1;
            int f2 = 1;
            int f3 = 0;
            for (int i = 3; i <= n; i++) {
                f3 = f1 + f2;
                f1 = f2;
                f2 = f3;
            }
            return f3;
        }
    }

    //作业
    //1.递归求 N 的阶乘
    public static int fac(int n) {
        if (n == 0 || n == 1){
            return n;
        }else{
            return n * fac(n - 1);
        }
    }

    //2.递归求 1 + 2 + 3 + ... + 10
    public static int sum(int n){
        if (n == 1){
            return 1;
        }else {
            return n + sum(n - 1);
        }
    }

    //3.递归求斐波那契数列的第 N 项
    public static int fib(int n){
        if (n == 0 || n == 1){
            return n;
        }else {
            return fib(n - 1) + fib(n - 2);
        }
    }

    //4.写一个递归方法，输入一个非负整数，返回组成它的数字之和
    public static int sumAdd(int n){
        if (n < 10){
            return n;
        }else {
            return n % 10 + sumAdd(n / 10);
        }
    }

    //5.按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) （递归）
    public static void print(int n){
        if (n < 10){
            System.out.print(n + " ");
        }else {
            print(n / 10);
            System.out.print(n % 10 + " ");
        }
    }

    //6.青蛙跳台阶问题
    public static int fogJump(int n){
        if (n == 0 || n == 1){
            return n + 1;
        }else {
            return fogJump(n - 1) + fogJump(n - 2);
        }
    }

    //7.递归求解汉诺塔问题
    public static void move(char pos1, char pos2){
        System.out.println(pos1 + " -> " + pos2);
    }
    public static void Hanoi(int n, char pos1, char pos2, char pos3){
        if (n == 1){
            move(pos1, pos3);
        }else {
            Hanoi(n - 1, pos1, pos3, pos2);
            move(pos1, pos3);
            Hanoi(n - 1, pos2, pos1, pos3);
        }
    }

    public static void main1(String[] args) {
        Hanoi(3,'A', 'B', 'C');
    }
    //8. 理解方法的基本用法, 方法重载, 方法递归, 并写一篇博客总结.
}

